{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Neural network regression\n", "\n", "Neural networks have become very popular recently due to the advent of high performance GPU algorithms for their application. Modern applications of neural networks often use very large networks, but in this sample we will demonstrate the possibilities using a network with a single hidden layer.\n", "\n", "The general idea of a neural network is shown in the picture below:\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each circle represents a neuron, and the output of the neuron is calculated as shown below. In simple terms, the output of a neuron is the weighted average of its inputs, passed through what is known as an activation function. The function shown in the picture is known as a logistic or sigmoid function.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will build our own network in this example to regress a one dimensional function. This means we will only have one input ($u$), and one output ($y$), but we can choose the number of hidden neurons. The more hidden neurons we have, the more curves we can handle in the fit function. 3 appears to be enough to do the general fits we do here without the training taking very long. There is no general rule for choosing the number of hidden neurons - use as few as possible to capture your behaviour as each new hidden neuron adds lots of weights which all have to be found." ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "Nhidden = 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to create weights between each input neuron and each hidden neuron as well as each hidden neuron and each output neuron." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "w_in_hidden = numpy.random.rand(Nhidden)\n", "w_hidden_out = numpy.random.rand(Nhidden)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also need a bias for the hidden layer and the output layer" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "bias_hidden = numpy.random.rand()\n", "bias_output = numpy.random.rand()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use a sigmoidal activation function:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "def sigmoid(i):\n", " expi = numpy.exp(-i)\n", " return ((1 - expi)/(1 + expi))" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = numpy.linspace(-5, 5)\n", "plt.plot(x, sigmoid(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To calculate the output of a neuron, we take the weighted sum of its inputs and apply the activation function. We can do this all simulateously with numpy arrays:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "def network_output(u, w_in_hidden, w_hidden_out, bias_hidden, bias_output):\n", " h = sigmoid(w_in_hidden*u + bias_hidden)\n", " y = sigmoid((w_hidden_out*h + bias_output).sum())\n", " \n", " return y" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4723938343512528" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "network_output(0.1, w_in_hidden, w_hidden_out, bias_hidden, bias_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's find the weights and bias to regress a function. Due to later decisions about the final activation function which is limited to be between -1 and 1, we will limit our function to be in that range." ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "known_u = numpy.linspace(-1, 1)\n", "known_y = numpy.sin(known_u*numpy.pi)*0.8 + numpy.random.randn(len(known_u))*0.05" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(known_u, known_y)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "import scipy.optimize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we're going to use optimisation functions which take an array, we need to be able to our parameters into a single array and unpack them again." ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "def pack(w_in_hidden, w_hidden_out, bias_hidden, bias_output):\n", " return numpy.concatenate([w_in_hidden, \n", " w_hidden_out, \n", " numpy.array([bias_hidden]), \n", " numpy.array([bias_output])])\n", "\n", "def unpack(parameters):\n", " parts = numpy.split(parameters, [Nhidden, 2*Nhidden, 2*Nhidden + 1])\n", " return parts" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "p0 = pack(w_in_hidden, w_hidden_out, bias_hidden, bias_output)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "def predict(parameters, us):\n", " w_in_hidden, w_hidden_out, bias_hidden, bias_output = unpack(parameters)\n", " return numpy.array([network_output(u, w_in_hidden, w_hidden_out, bias_hidden, bias_output) for u in us])" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "def plotfit(predictions):\n", " plt.scatter(known_u, known_y, alpha=0.4)\n", " plt.plot(known_u, predictions)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plotfit(predict(p0, known_u))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "def errorfunction(parameters):\n", " return known_y - predict(parameters, known_u)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "result = scipy.optimize.least_squares(errorfunction, p0)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plotfit(predict(result.x, known_u))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scikit-learn\n", "\n", "As I've mentioned before, you're probably better off using a library for things like this. The Scikit-Learn library has neural network regression built in. It is part of the standard Anaconda install." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "import sklearn\n", "import sklearn.neural_network" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "net = sklearn.neural_network.MLPRegressor(hidden_layer_sizes=Nhidden,\n", " activation='tanh', \n", " solver='lbfgs', max_iter=1000, learning_rate_init=0.001)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "observations = numpy.atleast_2d(known_u).T" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MLPRegressor(activation='tanh', alpha=0.0001, batch_size='auto', beta_1=0.9,\n", " beta_2=0.999, early_stopping=False, epsilon=1e-08,\n", " hidden_layer_sizes=4, learning_rate='constant',\n", " learning_rate_init=0.001, max_iter=1000, momentum=0.9,\n", " nesterovs_momentum=True, power_t=0.5, random_state=None,\n", " shuffle=True, solver='lbfgs', tol=0.0001, validation_fraction=0.1,\n", " verbose=False, warm_start=False)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net.fit(observations, known_y)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plotfit(net.predict(observations))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Keras\n", "\n", "The Keras library offers additinal flexibility, but is not installed by default in Anaconda. " ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/alchemyst/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", " from ._conv import register_converters as _register_converters\n", "Using TensorFlow backend.\n" ] } ], "source": [ "import keras" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential()" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "model.add(keras.layers.Dense(Nhidden, input_shape=(1,), activation='tanh'))\n", "model.add(keras.layers.Dense(1, activation='tanh'))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer='rmsprop', loss='mse')" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(known_u, known_y, epochs=10000, verbose=False)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plotfit(model.predict(known_u))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }